详谈redis之有序集合(ZSET) |
您所在的位置:网站首页 › redis zset score 最大值 › 详谈redis之有序集合(ZSET) |
一、前言
有序集合存储着成员(member)和分值(score)的键值对,按照分值从小到大自动排序,具体细节在第一篇blog《详谈redis数据结构》中,不太熟悉的同学可以回去查看。对Java不太熟悉的同学可关注文章末尾的公众号,里面满满干货。 二、命令 2.1 ZADDZADD全称zset add 将给定分值的成员添加到有序集合里面 System.out.println(conn.zadd("high",180,"Kelvin"));查看redis中,已存储该条数据 ZREM全称zset remove 从有序集合里面移除给定的成员,并返回被移除成员的数量 System.out.println(conn.zrem("high","Kelvin"));ZCARD全称zset card 返回有序集合包含的成员数量 System.out.println(conn.zadd("high",180,"Kelvin")); System.out.println(conn.zadd("high",160,"Lina")); System.out.println(conn.zadd("high",177,"Mike")); System.out.println(conn.zcard("high"));
ZINCRBY全称zset increase by 将成员的分值加上一个给定数。 System.out.println(conn.zincrby("high",2,"Kelvin"));ZCOUNT全称zset count 返回分值在[min,max]之间的成员数量 System.out.println(conn.zcount("high",165,190));ZRANK全称zset rank 返回成员在有序集合中的排名 System.out.println(conn.zrank("high","Kelvin"));ZSCORE全称zset score 返回成员的分值 System.out.println(conn.zscore("high","Kelvin"));ZRANGE全称zset range 返回有序集合中排名介于[start,stop]之间的成员,如果给定了可选的WITHSCORES选项,那么命令会将成员的分值也一并返回。 为了使我们的有序集合更具有可操作性,先添加一些成员。 //先将high有序集合扩充一下 System.out.println(conn.zadd("high",155,"Jin")); System.out.println(conn.zadd("high",161,"Yellow")); System.out.println(conn.zadd("high",172,"Lucy"));查看redis里面high有序集合存储的信息
那么如果我们想拿到(3,6]并且拿到这些同学的分值 System.out.println(conn.zrangeWithScores("high",3,6));ZREVRANK全称zset reversal rank 返回成员在有序集合里的排名,按照分值从大到小排列,默认的是从小到大,这里翻转了一下。 ZREVRANGE全称zset reverse range 返回有序集合给定排名范围内的成员,成员按照分值从大到小排列 System.out.println(conn.zrevrange("high",1,5));
ZRANGEBYSCORE全称zset range by score 返回有序集合中分值介于min和max之间的所有成员 我们挑出分值在160到180之间的成员 System.out.println(conn.zrangeByScore("high",160,180));ZREVRANGEBYSCORE全称zset reversal range by score 获取有序集合中分值介于min和max之间的所有成员,并按照分值从大到小的顺序来返回他们 System.out.println(conn.zrevrangeByScore("high",180,160));ZREMRANGEBYRANK全称zset remove range by rank 移除有序集合中排名介于start和stop之间的所有成员 在移除之间先查看一下redis中的数据 返回被移除的数量 ZREMRANGEBYSCORE全称zset remove range by score 移除有序集合中排名分值介于start和stop之间的所有成员 为了演示方便,我们将在high有序集合中多添加几行数据 System.out.println(conn.zadd("high",174,"Jay")); System.out.println(conn.zadd("high",169,"Pei")); System.out.println(conn.zadd("high",186,"Jone"));
ZINTERSTORE全称zset inter store 对给定的有序集合做交集运算,默认使用的聚合函数为sum,即默认在做交集操作时将不同集合中相同的成员所对应的分值相加,然后聚合成一个新的有序集合。 先创建两个有序集合 System.out.println(conn.zadd("zset-key1",1,"a")); System.out.println(conn.zadd("zset-key1",2,"b")); System.out.println(conn.zadd("zset-key1",3,"c")); System.out.println(conn.zadd("zset-key2",10,"b")); System.out.println(conn.zadd("zset-key2",20,"c")); System.out.println(conn.zadd("zset-key2",30,"d"));很明显zset-key1和zset-key2的共同成员有"b"和"c",新建一个有序集合用来做两者的交集。 System.out.println(conn.zinterstore("zset-key3","zset-key1","zset-key2"));
那么如果我们选用聚合函数MAX,就是在取交集时,选用相同成员中分值较高者为交集的分值要怎么操作呢 ZParams zParams = new ZParams(); zParams.aggregate(ZParams.Aggregate.MAX); System.out.println(conn.zinterstore("zset-key4",zParams,"zset-key1","zset-key2"));查看redis中的数据 ZUNIONSTORE全称zset union store 对给定的有序集合做并集运算,同样并集运算的聚合函数也可以选用“max”,"min"和“sum”。为了避免重复性说明,我们选用max来做一次并集示范。 ZParams zParams = new ZParams(); zParams.aggregate(ZParams.Aggregate.MAX); System.out.println(conn.zunionstore("zset-key5",zParams,"zset-key1","zset-key2"));redis的五种数据类型的相关命令已经介绍完毕,接下去还会介绍一些redis中常用的其他命令,比如发布与订阅,键过期时间等等。 对Java系列知识感兴趣的朋友可以加入QQ群 慧梦软件开发技术联盟:952317701 更多系列文章在java高级程序开发微信公众号 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |